<?php

// 应用公共文件
if (!function_exists('exception')) {

    /**
     * 抛出异常处理
     *
     * @param string $msg 异常消息
     * @param integer $code 异常代码 默认为0
     * @param string $exception 异常类
     *
     * @throws Exception
     */
    function exception($msg, $code = 0, $exception = '') {
        $e = $exception ?: '\think\Exception';
        throw new $e($msg, $code);
    }

}
if (!function_exists('field_type_list')) {

    /**
     * 字段类型
     * @author Tiger <1192851302@qq.com>
     * @param type $type
     * @return string
     */
    function field_type_list($type = '') {
        $typeList = [
            'text' => '文本输入框',
            'password' => '密码输入框',
            'number' => '数字输入框',
            'select' => '下拉框',
            'checkbox' => '多选框',
            'radio' => '单选框',
            'textarea' => '多行文本域',
            'year' => '年份选择',
            'month' => '月份选择',
            'date' => '日期选择',
            'time' => '时间选择',
            'datetime' => '日期时间',
            'upload' => '本地上传'
        ];
        if ($type) {
            return $typeList[$type];
        }
        return $typeList;
    }

}
if (!function_exists('encrypt_password')) {

    /**
     * 有盐味的加密
     * @author Tiger <1192851302@qq.com>
     * @param type $password
     * @param type $salt
     * @return type
     */
    function encrypt_password($password, $salt) {
        return md5(md5(sha1($password . $salt)));
    }

}
if (!function_exists('create_salt')) {

    /**
     * 创造颜值
     * @author Tiger <1192851302@qq.com>
     * @param type $length
     * @return type
     */
    function create_salt($length = 4) {
        $str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        $len = strlen($str); //计算字符串的长度
        $yzm = '';
        for ($i = 0; $i < $length; $i++) {
            $rand = mt_rand(0, $len - 1);
            $yzm .= substr($str, $rand, 1);
        }
        return $yzm;
    }

}

if (!function_exists('system_config')) {

    /**
     * 获取系统配置
     * @author Tiger <1192851302@qq.com>
     * @param type $key
     * @return type
     */
    function system_config($key = null) {
        if ($key === null) {
            return null;
        }
        if (is_array($key)) {
            return \app\admin\model\AdminConfig::getMore($key);
        }
        return \app\admin\model\AdminConfig::getOne($key);
    }

}
if (!function_exists('strToArray')) {

    /**
     * 字符串转换数组（以逗号隔开）
     * @author Tiger <1192851302@qq.com>
     * @param string $string Description
     * @return
     */
    function strToArray($string) {
        if (is_array($string)) {
            $data_arr = array_unique(array_filter($string));
        } else {
            $data_arr = $string ? array_unique(array_filter(explode(',', $string))) : [];
        }
        return $data_arr ? array_merge($data_arr) : [];
    }

}
if (!function_exists('arrayToStr')) {

    /**
     * 数组转换字符串（以逗号隔开）
     * @author Tiger <1192851302@qq.com>
     * @param array $array Description
     * @return
     */
    function arrayToStr($array) {
        if (is_array($array) === false) {
            $data_arr[] = $array;
        } else {
            $data_arr = $array;
        }
        $data_arr = array_merge(array_unique(array_filter($data_arr)));
        return $data_arr ? ',' . implode(',', $data_arr) . ',' : '';
    }

}
if (!function_exists('getRandom')) {

    /**
     * 生成随机字符串
     * @param type $num
     * @return type
     */
    function getRandom($num = 32) {
        $str = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
        $key = "";
        $number = bcsub($num, 14);
        for ($i = 0; $i < $number; $i++) {
            $key .= $str[mt_rand(0, 25)];     //生成php随机数
        }
        return date('YmdHis') . $key;
    }

}

if (!function_exists('letter_avatar')) {

    /**
     * 首字母头像
     * @param $text
     * @return string
     */
    function letter_avatar($text) {
        $total = unpack('L', hash('adler32', $text, true))[1];
        $hue = $total % 360;
        list($r, $g, $b) = hsv2rgb($hue / 360, 0.3, 0.9);

        $bg = "rgb({$r},{$g},{$b})";
        $color = "#ffffff";
        $first = mb_strtoupper(mb_substr($text, 0, 1));
        $src = base64_encode('<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="100" width="100"><rect fill="' . $bg . '" x="0" y="0" width="100" height="100"></rect><text x="50" y="50" font-size="50" text-copy="fast" fill="' . $color . '" text-anchor="middle" text-rights="admin" dominant-baseline="central">' . $first . '</text></svg>');
        $value = 'data:image/svg+xml;base64,' . $src;
        return $value;
    }

}

if (!function_exists('hsv2rgb')) {

    function hsv2rgb($h, $s, $v) {
        $r = $g = $b = 0;

        $i = floor($h * 6);
        $f = $h * 6 - $i;
        $p = $v * (1 - $s);
        $q = $v * (1 - $f * $s);
        $t = $v * (1 - (1 - $f) * $s);

        switch ($i % 6) {
            case 0:
                $r = $v;
                $g = $t;
                $b = $p;
                break;
            case 1:
                $r = $q;
                $g = $v;
                $b = $p;
                break;
            case 2:
                $r = $p;
                $g = $v;
                $b = $t;
                break;
            case 3:
                $r = $p;
                $g = $q;
                $b = $v;
                break;
            case 4:
                $r = $t;
                $g = $p;
                $b = $v;
                break;
            case 5:
                $r = $v;
                $g = $p;
                $b = $q;
                break;
        }

        return [
            floor($r * 255),
            floor($g * 255),
            floor($b * 255)
        ];
    }

}

/**
 * 
 * @param type $value
 * @return type
 */
function getPhoneAttr($value) {
    if ($value) {
        $value = preg_replace('/(\d{3})\d{4}(\d{4})/', '$1****$2', $value);
    }
    return $value;
}

/**
 * 
 * @param type $lat1 我的纬度
 * @param type $lng1 我的经度
 * @param type $lat2 纬度
 * @param type $lng2 经度
 * @return boolean
 */
function getDistance($lat1, $lng1, $lat2, $lng2) {
    if (empty($lat1) || empty($lng1) || empty($lat2) || empty($lng2)) {
        return false;
    }
    $radLat1 = deg2rad($lat1);
    $radLat2 = deg2rad($lat2);
    $radLng1 = deg2rad($lng1);
    $radLng2 = deg2rad($lng2);
    $a = $radLat1 - $radLat2;
    $b = $radLng1 - $radLng2;
    $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137;
    return sprintf('%.2f', $s) * 1000;
}

/**
 *  根据身份证号码获取性别
 *  author:xiaochuan
 *  @param string $idcard    身份证号码
 *  @return int $sex 性别 1男 2女 0未知
 */
function get_sex($idcard) {
    if (empty($idcard)) {
        return null;
    }
    $sexint = (int) substr($idcard, 16, 1);
    return $sexint % 2 === 0 ? 2 : 1;
}

/**
 *  根据身份证号码获取生日
 *  author:xiaochuan
 *  @param string $idcard    身份证号码
 *  @return $birthday
 */
function get_birthday($idcard) {
    if (empty($idcard)) {
        return null;
    }
    $bir = substr($idcard, 6, 8);
    $year = (int) substr($bir, 0, 4);
    $month = (int) substr($bir, 4, 2);
    $day = (int) substr($bir, 6, 2);
    return $year . '-' . $month . '-' . $day;
}

/**
 *  根据身份证号码计算年龄
 *  author:xiaochuan
 *  @param string $idcard    身份证号码
 *  @return int $age
 */
function get_age($idcard) {
    if (empty($idcard)) {
        return null;
    }
    #  获得出生年月日的时间戳 
    $date = strtotime(substr($idcard, 6, 8));
    #  获得今日的时间戳 
    $today = strtotime('today');
    #  得到两个日期相差的大体年数 
    $diff = floor(($today - $date) / 86400 / 365);
    #  strtotime加上这个年数后得到那日的时间戳后与今日的时间戳相比 
    $age = strtotime(substr($idcard, 6, 8) . ' +' . $diff . 'years') > $today ? ($diff + 1) : $diff;
    return $age;
}
